package com.adil.base.collections.set;

/**
 * @description: LinkedHashSet
 * @author: Adil
 * @date: 2024/4/24
 */
public class LinkedHashSet {
    public static void main(String[] args) {
    //  HashSet 和 LinkedHashSet 都是 Java 集合框架中的 Set 接口的实现，它们都提供了不存储重复元素的集合。然而，它们在内部实现和某些行为特性上存在一些重要的区别。以下是它们之间的主要差异：
    //  内部实现：
    //  HashSet 是基于 HashMap 实现的。它使用哈希表来存储元素，因此它的元素是无序的。元素的插入和查找操作平均时间复杂度为 O(1)。
    //  LinkedHashSet 是基于 HashMap 和双向链表实现的。它使用哈希表来存储元素，并使用双向链表来维护元素的插入顺序。因此，遍历 LinkedHashSet 时，元素会按照它们被插入的顺序（或最近访问的顺序，如果调用了 remove() 方法）出现。
    //  迭代顺序：
    //  HashSet 不保证元素的迭代顺序。每次迭代都可能返回不同的顺序。
    //  LinkedHashSet 则按照元素的插入顺序进行迭代。如果元素被删除并重新添加，那么它将出现在迭代顺序的末尾，而不是原来的位置。
    //  性能：
    //  在大多数情况下，HashSet 的性能要略优于 LinkedHashSet，因为它不需要维护额外的链表结构。但是，如果你需要保持元素的插入顺序，那么 LinkedHashSet 可能是更好的选择。
    //  空间复杂度：
    //  由于 LinkedHashSet 需要维护额外的链表结构，因此它通常会比 HashSet 占用更多的内存。
    //  总的来说，选择使用 HashSet 还是 LinkedHashSet 取决于你的具体需求。如果你只关心集合中是否包含某个元素，并且不关心元素的顺序，那么 HashSet 是一个很好的选择。然而，如果你需要保持元素的插入顺序，那么应该选择 LinkedHashSet。

    }
}
